<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
  </head>

  <body>
    <script>
      /*
      ES6 之前通过 构造函数+ 原型实现面向对象 编程
        (1) 构造函数有原型对象prototype
        (2) 构造函数原型对象prototype 里面有constructor 指向构造函数本身
        (3) 构造函数可以通过原型对象添加方法
        (4) 构造函数创建的实例对象有__proto__ 原型指向 构造函数的原型对象
      */

      // ES6 通过类实现面向对象编程
      class Star {}
      console.log(typeof Star)
      // 1. 类的本质其实还是一个函数，也可以简单的认为，类就是构造函数的另外一种写法
      // (1) 类有原型对象prototype
      console.log(Star.prototype)
      // (2) 类原型对象prototype 里面有constructor 指向类本身
      console.log(Star.prototype.constructor)
      // (3) 类可以通过原型对象添加方法
      Star.prototype.act = function () {
        console.log("非自然死亡")
      }
      var shiyuan = new Star()
      console.dir(shiyuan)
      // (4) 类创建的实例对象有__proto__ 原型指向 类的原型对象
      console.log(shiyuan.__proto__ === Star.prototype)
    </script>
  </body>
</html>
